define([
        '../Core/freezeObject',
        '../Core/WebGLConstants'
    ], function(
        freezeObject,
        WebGLConstants) {
    'use strict';

    /**
     * Determines the action taken based on the result of the stencil test.
     *
     * @exports StencilOperation
     */
    var StencilOperation = {
        /**
         * Sets the stencil buffer value to zero.
         *
         * @type {Number}
         * @constant
         */
        ZERO : WebGLConstants.ZERO,

        /**
         * Does not change the stencil buffer.
         *
         * @type {Number}
         * @constant
         */
        KEEP : WebGLConstants.KEEP,

        /**
         * Replaces the stencil buffer value with the reference value.
         *
         * @type {Number}
         * @constant
         */
        REPLACE : WebGLConstants.REPLACE,

        /**
         * Increments the stencil buffer value, clamping to unsigned byte.
         *
         * @type {Number}
         * @constant
         */
        INCREMENT : WebGLConstants.INCR,

        /**
         * Decrements the stencil buffer value, clamping to zero.
         *
         * @type {Number}
         * @constant
         */
        DECREMENT : WebGLConstants.DECR,

        /**
         * Bitwise inverts the existing stencil buffer value.
         *
         * @type {Number}
         * @constant
         */
        INVERT : WebGLConstants.INVERT,

        /**
         * Increments the stencil buffer value, wrapping to zero when exceeding the unsigned byte range.
         *
         * @type {Number}
         * @constant
         */
        INCREMENT_WRAP : WebGLConstants.INCR_WRAP,

        /**
         * Decrements the stencil buffer value, wrapping to the maximum unsigned byte instead of going below zero.
         *
         * @type {Number}
         * @constant
         */
        DECREMENT_WRAP : WebGLConstants.DECR_WRAP
    };

    return freezeObject(StencilOperation);
});
